package com.example.demospringmybatisplus.utils;

import org.apache.commons.collections.CollectionUtils;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.function.Consumer;
import java.util.function.Function;
import java.util.stream.Collectors;

/**
 * Set工具类
 *
 * @author huahua
 * @DATE 2025/4/25
 **/
public class SetUtils {
    /**
     * map转换成Set
     *
     * @param data list数据
     * @param map 集合转换规则
     * @return set集合
     * @param <T> 入参list类型
     * @param <R> 出参set类型
     */
    public static <T,R> Set<R> mapToSet(List<T> data, Function<T,R> map) {
        if(CollectionUtils.isEmpty(data)){
            return new HashSet<>();
        }
        return data.stream().map(map).collect(Collectors.toSet());
    }

    /**
     * 批量处理set
     *
     * @param set set集合
     * @param batchSize 批次大小
     * @param consumer 消费函数
     * @param <T> 入参set类型
     */
    public static <T> void processInBatch(Set<T> set, int batchSize, Consumer<Set<T>> consumer) {
        if (CollectionUtils.isEmpty(set)) {
            return;
        }
        List<T> list = new ArrayList<>(set);
        for (int i = 0; i < list.size(); i += batchSize) {
            int end = Math.min(i + batchSize, list.size());
            Set<T> subSet = new HashSet<>(list.subList(i, end));
            consumer.accept(subSet);
        }
    }
}
